home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / xfs / libxfs.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  21KB  |  506 lines

  1. /*
  2.  * Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of version 2 of the GNU General Public License as
  6.  * published by the Free Software Foundation.
  7.  *
  8.  * This program is distributed in the hope that it would be useful, but
  9.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  *
  12.  * Further, this software is distributed without any warranty that it is
  13.  * free of the rightful claim of any third person regarding infringement
  14.  * or the like.  Any license provided herein, whether implied or
  15.  * otherwise, applies only to this software file.  Patent licenses, if
  16.  * any, provided herein do not apply to combinations of this program with
  17.  * other software, or any other product whatsoever.
  18.  *
  19.  * You should have received a copy of the GNU General Public License along
  20.  * with this program; if not, write the Free Software Foundation, Inc., 59
  21.  * Temple Place - Suite 330, Boston MA 02111-1307, USA.
  22.  *
  23.  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
  24.  * Mountain View, CA  94043, or:
  25.  *
  26.  * http://www.sgi.com
  27.  *
  28.  * For further information regarding this notice, see:
  29.  *
  30.  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  31.  */
  32. #ifndef __LIBXFS_H__
  33. #define __LIBXFS_H__
  34.  
  35. #define XFS_BIG_INUMS    1
  36. #define XFS_BIG_BLKNOS    1
  37.  
  38. #include <xfs/platform_defs.h>
  39.  
  40. #include <xfs/xfs_fs.h>
  41. #include <xfs/xfs_types.h>
  42. #include <xfs/xfs_arch.h>
  43. #include <xfs/xfs_sb.h>
  44. #include <xfs/xfs_bit.h>
  45. #include <xfs/xfs_inum.h>
  46. #include <xfs/xfs_ag.h>
  47. #include <xfs/xfs_da_btree.h>
  48. #include <xfs/xfs_bmap_btree.h>
  49. #include <xfs/xfs_alloc_btree.h>
  50. #include <xfs/xfs_ialloc_btree.h>
  51. #include <xfs/xfs_alloc.h>
  52. #include <xfs/xfs_ialloc.h>
  53. #include <xfs/xfs_rtalloc.h>
  54. #include <xfs/xfs_btree.h>
  55. #include <xfs/xfs_dir.h>
  56. #include <xfs/xfs_dir_sf.h>
  57. #include <xfs/xfs_dir_leaf.h>
  58. #include <xfs/xfs_dir2.h>
  59. #include <xfs/xfs_dir2_data.h>
  60. #include <xfs/xfs_dir2_leaf.h>
  61. #include <xfs/xfs_dir2_block.h>
  62. #include <xfs/xfs_dir2_node.h>
  63. #include <xfs/xfs_dir2_sf.h>
  64. #include <xfs/xfs_attr_sf.h>
  65. #include <xfs/xfs_dinode.h>
  66. #include <xfs/xfs_attr_leaf.h>
  67. #include <xfs/xfs_quota.h>
  68. #include <xfs/xfs_mount.h>
  69. #include <xfs/xfs_trans_space.h>
  70. #include <xfs/xfs_inode.h>
  71. #include <xfs/xfs_buf_item.h>
  72. #include <xfs/xfs_inode_item.h>
  73. #include <xfs/xfs_bmap.h>
  74. #include <xfs/xfs_imap.h>
  75. #include <xfs/xfs_log.h>
  76. #include <xfs/xfs_log_priv.h>
  77.  
  78. #ifndef XFS_SUPER_MAGIC
  79. #define XFS_SUPER_MAGIC 0x58465342
  80. #endif
  81.  
  82. #define xfs_isset(a,i)    ((a)[(i)/(sizeof((a))*NBBY)] & (1<<((i)%(sizeof((a))*NBBY))))
  83.  
  84. /*
  85.  * Argument structure for libxfs_init().
  86.  */
  87. typedef struct {
  88.                 /* input parameters */
  89.     char            *volname;       /* pathname of volume */
  90.     char            *dname;         /* pathname of data "subvolume" */
  91.     char            *logname;       /* pathname of log "subvolume" */
  92.     char            *rtname;        /* pathname of realtime "subvolume" */
  93.     int             isreadonly;     /* filesystem is only read in applic */
  94.     int             disfile;        /* data "subvolume" is a regular file */        int             dcreat;         /* try to create data subvolume */
  95.     int             lisfile;        /* log "subvolume" is a regular file */
  96.     int             lcreat;         /* try to create log subvolume */
  97.     int             risfile;        /* realtime "subvolume" is a reg file */        int             rcreat;         /* try to create realtime subvolume */
  98.     char            *notvolmsg;     /* format string for not XLV message */
  99.     int             notvolok;       /* set if not XLV => try data */
  100.     int        setblksize;    /* attempt to set device blksize */
  101.                 /* output results */
  102.     dev_t           ddev;           /* device for data subvolume */
  103.     dev_t           logdev;         /* device for log subvolume */
  104.     dev_t           rtdev;          /* device for realtime subvolume */
  105.     long long       dsize;          /* size of data subvolume (BBs) */
  106.     long long       logBBsize;      /* size of log subvolume (BBs) */
  107.                     /* (blocks allocated for use as
  108.                      * log is stored in mount structure) */
  109.     long long       logBBstart;     /* start block of log subvolume (BBs) */
  110.     long long       rtsize;         /* size of realtime subvolume (BBs) */
  111.     int        dbsize;        /* data subvolume device blksize */
  112.     int        lbsize;        /* log subvolume device blksize */
  113.     int        rtbsize;    /* realtime subvolume device blksize */
  114.     int             dfd;            /* data subvolume file descriptor */
  115.     int             logfd;          /* log subvolume file descriptor */
  116.     int             rtfd;           /* realtime subvolume file descriptor */
  117. } libxfs_init_t;
  118.  
  119. #define LIBXFS_EXIT_ON_FAILURE    0x0001    /* exit the program if a call fails */
  120. #define LIBXFS_ISREADONLY    0x0002    /* disallow all mounted filesystems */
  121. #define LIBXFS_ISINACTIVE    0x0004    /* allow mounted only if mounted ro */
  122. #define LIBXFS_DANGEROUSLY    0x0008    /* repairing a device mounted ro    */
  123. #define LIBXFS_EXCLUSIVELY    0x0010    /* disallow other accesses (O_EXCL) */
  124.  
  125. extern char    *progname;
  126. extern int    libxfs_init (libxfs_init_t *);
  127. extern int    libxfs_device_to_fd (dev_t);
  128. extern dev_t    libxfs_device_open (char *, int, int, int);
  129. extern void    libxfs_device_zero (dev_t, xfs_daddr_t, uint);
  130. extern void    libxfs_device_close (dev_t);
  131.  
  132. /* check or write log footer: specify device, log size in blocks & uuid */
  133. typedef xfs_caddr_t (libxfs_get_block_t)(xfs_caddr_t, int, void *);
  134.  
  135. extern int    libxfs_log_clear (dev_t, xfs_daddr_t, uint, uuid_t *,
  136.                 int, int, int);
  137. extern int    libxfs_log_header (xfs_caddr_t, uuid_t *, int, int, int,
  138.                 libxfs_get_block_t *, void *);
  139.  
  140.  
  141. /*
  142.  * Define a user-level mount structure with all we need
  143.  * in order to make use of the numerous XFS_* macros.
  144.  */
  145. struct xfs_inode;
  146. typedef struct xfs_mount {
  147.     xfs_sb_t        m_sb;        /* copy of fs superblock */
  148.     char            *m_fsname;    /* filesystem name */
  149.     int            m_bsize;    /* fs logical block size */
  150.     xfs_agnumber_t        m_agfrotor;    /* last ag where space found */
  151.     xfs_agnumber_t        m_agirotor;    /* last ag dir inode alloced */
  152.     xfs_agnumber_t        m_maxagi;    /* highest inode alloc group */
  153.     uint            m_rsumlevels;    /* rt summary levels */
  154.     uint            m_rsumsize;    /* size of rt summary, bytes */
  155.     struct xfs_inode    *m_rbmip;    /* pointer to bitmap inode */
  156.     struct xfs_inode    *m_rsumip;    /* pointer to summary inode */
  157.     struct xfs_inode    *m_rootip;    /* pointer to root directory */
  158.     dev_t            m_dev;
  159.     dev_t            m_logdev;
  160.     dev_t            m_rtdev;
  161.     __uint8_t        m_dircook_elog;    /* log d-cookie entry bits */
  162.     __uint8_t        m_blkbit_log;    /* blocklog + NBBY */
  163.     __uint8_t        m_blkbb_log;    /* blocklog - BBSHIFT */
  164.     __uint8_t        m_sectbb_log;    /* sectorlog - BBSHIFT */
  165.     __uint8_t        m_agno_log;    /* log #ag's */
  166.     __uint8_t        m_agino_log;    /* #bits for agino in inum */
  167.     __uint16_t        m_inode_cluster_size;/* min inode buf size */
  168.     uint            m_blockmask;    /* sb_blocksize-1 */
  169.     uint            m_blockwsize;    /* sb_blocksize in words */
  170.     uint            m_blockwmask;    /* blockwsize-1 */
  171.     uint            m_alloc_mxr[2];    /* XFS_ALLOC_BLOCK_MAXRECS */
  172.     uint            m_alloc_mnr[2];    /* XFS_ALLOC_BLOCK_MINRECS */
  173.     uint            m_bmap_dmxr[2];    /* XFS_BMAP_BLOCK_DMAXRECS */
  174.     uint            m_bmap_dmnr[2];    /* XFS_BMAP_BLOCK_DMINRECS */
  175.     uint            m_inobt_mxr[2];    /* XFS_INOBT_BLOCK_MAXRECS */
  176.     uint            m_inobt_mnr[2];    /* XFS_INOBT_BLOCK_MINRECS */
  177.     uint            m_ag_maxlevels;    /* XFS_AG_MAXLEVELS */
  178.     uint            m_bm_maxlevels[2]; /* XFS_BM_MAXLEVELS */
  179.     uint            m_in_maxlevels;    /* XFS_IN_MAXLEVELS */
  180.     xfs_perag_t        *m_perag;    /* per-ag accounting info */
  181.     uint            m_flags;    /* global mount flags */
  182.     uint            m_qflags;    /* quota status flags */
  183.     uint            m_attroffset;    /* inode attribute offset */
  184.     uint            m_dir_node_ents; /* #entries in a dir danode */
  185.     uint            m_attr_node_ents; /* #entries in attr danode */
  186.     int            m_ialloc_inos;    /* inodes in inode allocation */
  187.     int            m_ialloc_blks;    /* blocks in inode allocation */
  188.     int            m_litino;    /* size of inode union area */
  189.     int            m_inoalign_mask;/* mask sb_inoalignmt if used */
  190.     xfs_trans_reservations_t m_reservations;/* precomputed res values */
  191.     __uint64_t        m_maxicount;    /* maximum inode count */
  192.     int            m_dalign;    /* stripe unit */
  193.     int            m_swidth;    /* stripe width */
  194.     int            m_sinoalign;    /* stripe unit inode alignmnt */
  195.     int            m_dir_magicpct;    /* 37% of the dir blocksize */
  196.     __uint8_t        m_dirversion;    /* 1 or 2 */
  197.     int            m_dirblksize;    /* directory block sz--bytes */
  198.     int            m_dirblkfsbs;    /* directory block sz--fsbs */
  199.     xfs_dablk_t        m_dirdatablk;    /* blockno of dir data v2 */
  200.     xfs_dablk_t        m_dirleafblk;    /* blockno of dir non-data v2 */
  201.     xfs_dablk_t        m_dirfreeblk;    /* blockno of dirfreeindex v2 */
  202. } xfs_mount_t;
  203.  
  204. #define LIBXFS_MOUNT_ROOTINOS    0x0001
  205. #define LIBXFS_MOUNT_DEBUGGER    0x0002
  206.  
  207. extern xfs_mount_t    *libxfs_mount (xfs_mount_t *, xfs_sb_t *,
  208.                 dev_t, dev_t, dev_t, int);
  209. extern void    libxfs_mount_common (xfs_mount_t *, xfs_sb_t *);
  210. extern xfs_agnumber_t    libxfs_initialize_perag (xfs_mount_t *, xfs_agnumber_t);
  211. extern void    libxfs_umount (xfs_mount_t *);
  212. extern int    libxfs_rtmount_init (xfs_mount_t *);
  213. extern void    libxfs_alloc_compute_maxlevels (xfs_mount_t *);
  214. extern void    libxfs_bmap_compute_maxlevels (xfs_mount_t *, int);
  215. extern void    libxfs_ialloc_compute_maxlevels (xfs_mount_t *);
  216. extern void    libxfs_trans_init (xfs_mount_t *);
  217.  
  218.  
  219. /*
  220.  * Simple I/O interface
  221.  */
  222. typedef struct xfs_buf {
  223.     xfs_daddr_t    b_blkno;
  224.     unsigned    b_bcount;
  225.     dev_t        b_dev;
  226.     void        *b_fsprivate;
  227.     void        *b_fsprivate2;
  228.     void        *b_fsprivate3;
  229.     char        *b_addr;
  230.     /* b_addr must be the last field */
  231. } xfs_buf_t;
  232. #define XFS_BUF_PTR(bp)            ((bp)->b_addr)
  233. #define xfs_buf_offset(bp, offset)    (XFS_BUF_PTR(bp) + (offset))
  234. #define XFS_BUF_ADDR(bp)        ((bp)->b_blkno)
  235. #define XFS_BUF_COUNT(bp)        ((bp)->b_bcount)
  236. #define XFS_BUF_TARGET(bp)        ((bp)->b_dev)
  237. #define XFS_BUF_SET_PTR(bp,p,cnt)    ((bp)->b_addr = (char *)(p)); \
  238.                         XFS_BUF_SETCOUNT(bp,cnt)
  239. #define XFS_BUF_SET_ADDR(bp,blk)    ((bp)->b_blkno = (blk))
  240. #define XFS_BUF_SETCOUNT(bp,cnt)    ((bp)->b_bcount = (cnt))
  241.  
  242. #define XFS_BUF_FSPRIVATE(bp,type)    ((type)(bp)->b_fsprivate)
  243. #define XFS_BUF_SET_FSPRIVATE(bp,val)    (bp)->b_fsprivate = (void *)(val)
  244. #define XFS_BUF_FSPRIVATE2(bp,type)    ((type)(bp)->b_fsprivate2)
  245. #define XFS_BUF_SET_FSPRIVATE2(bp,val)    (bp)->b_fsprivate2 = (void *)(val)
  246. #define XFS_BUF_FSPRIVATE3(bp,type)    ((type)(bp)->b_fsprivate3)
  247. #define XFS_BUF_SET_FSPRIVATE3(bp,val)    (bp)->b_fsprivate3 = (void *)(val)
  248.  
  249. extern xfs_buf_t    *libxfs_getbuf (dev_t, xfs_daddr_t, int);
  250. extern xfs_buf_t    *libxfs_readbuf (dev_t, xfs_daddr_t, int, int);
  251. extern xfs_buf_t    *libxfs_getsb (xfs_mount_t *, int);
  252. extern int    libxfs_readbufr (dev_t, xfs_daddr_t, xfs_buf_t *, int, int);
  253. extern int    libxfs_writebuf (xfs_buf_t *, int);
  254. extern int    libxfs_writebuf_int (xfs_buf_t *, int);
  255. extern void    libxfs_putbuf (xfs_buf_t *);
  256.  
  257.  
  258. /*
  259.  * Transaction interface
  260.  */
  261.  
  262. typedef struct xfs_log_item {
  263.     struct xfs_log_item_desc    *li_desc;    /* ptr to current desc*/
  264.     struct xfs_mount        *li_mountp;    /* ptr to fs mount */
  265.     uint                li_type;    /* item type */
  266. } xfs_log_item_t;
  267.  
  268. typedef struct xfs_inode_log_item {
  269.     xfs_log_item_t        ili_item;        /* common portion */
  270.     struct xfs_inode    *ili_inode;        /* inode pointer */
  271.     unsigned short        ili_flags;        /* misc flags */
  272.     unsigned int        ili_last_fields;    /* fields when flushed*/
  273.     xfs_inode_log_format_t    ili_format;        /* logged structure */
  274. } xfs_inode_log_item_t;
  275.  
  276. typedef struct xfs_buf_log_item {
  277.     xfs_log_item_t        bli_item;    /* common item structure */
  278.     struct xfs_buf        *bli_buf;    /* real buffer pointer */
  279.     unsigned int        bli_flags;    /* misc flags */
  280.     unsigned int        bli_recur;    /* recursion count */
  281.     xfs_buf_log_format_t    bli_format;    /* in-log header */
  282. } xfs_buf_log_item_t;
  283.  
  284. #include <xfs/xfs_trans.h>
  285.  
  286. typedef struct xfs_trans {
  287.     unsigned int    t_type;            /* transaction type */
  288.     xfs_mount_t    *t_mountp;        /* ptr to fs mount struct */
  289.     unsigned int    t_flags;        /* misc flags */
  290.     long        t_icount_delta;        /* superblock icount change */
  291.     long        t_ifree_delta;        /* superblock ifree change */
  292.     long        t_fdblocks_delta;    /* superblock fdblocks chg */
  293.     long        t_frextents_delta;    /* superblock freextents chg */
  294.     unsigned int    t_items_free;        /* log item descs free */
  295.     xfs_log_item_chunk_t    t_items;    /* first log item desc chunk */
  296. } xfs_trans_t;
  297.  
  298. extern xfs_trans_t    *libxfs_trans_alloc (xfs_mount_t *, int);
  299. extern xfs_trans_t    *libxfs_trans_dup (xfs_trans_t *);
  300. extern int    libxfs_trans_reserve (xfs_trans_t *, uint,uint,uint,uint,uint);
  301. extern int    libxfs_trans_commit (xfs_trans_t *, uint, xfs_lsn_t *);
  302. extern void    libxfs_trans_cancel (xfs_trans_t *, int);
  303. extern void    libxfs_mod_sb (xfs_trans_t *, __int64_t);
  304.  
  305. extern int    libxfs_trans_iget (xfs_mount_t *, xfs_trans_t *, xfs_ino_t,
  306.                 uint, struct xfs_inode **);
  307. extern void    libxfs_trans_iput(xfs_trans_t *, struct xfs_inode *, uint);
  308. extern void    libxfs_trans_ijoin (xfs_trans_t *, struct xfs_inode *, uint);
  309. extern void    libxfs_trans_ihold (xfs_trans_t *, struct xfs_inode *);
  310. extern void    libxfs_trans_log_inode (xfs_trans_t *, struct xfs_inode *,
  311.                 uint);
  312.  
  313. extern void    libxfs_trans_brelse (xfs_trans_t *, struct xfs_buf *);
  314. extern void    libxfs_trans_binval (xfs_trans_t *, struct xfs_buf *);
  315. extern void    libxfs_trans_bjoin (xfs_trans_t *, struct xfs_buf *);
  316. extern void    libxfs_trans_bhold (xfs_trans_t *, struct xfs_buf *);
  317. extern void    libxfs_trans_log_buf (xfs_trans_t *, struct xfs_buf *,
  318.                 uint, uint);
  319. extern xfs_buf_t    *libxfs_trans_get_buf (xfs_trans_t *, dev_t,
  320.                 xfs_daddr_t, int, uint);
  321. extern int    libxfs_trans_read_buf (xfs_mount_t *, xfs_trans_t *, dev_t,
  322.                 xfs_daddr_t, int, uint, struct xfs_buf **);
  323.  
  324.  
  325. /*
  326.  * Simple memory interface
  327.  */
  328. typedef struct xfs_zone {
  329.     int    zone_unitsize;    /* Size in bytes of zone unit           */
  330.     char    *zone_name;    /* tag name                             */
  331.     int    allocated;    /* debug: How many currently allocated  */
  332. } xfs_zone_t;
  333.  
  334. extern xfs_zone_t    *libxfs_zone_init (int, char *);
  335. extern void    *libxfs_zone_zalloc (xfs_zone_t *);
  336. extern void    libxfs_zone_free (xfs_zone_t *, void *);
  337. extern void    *libxfs_malloc (size_t);
  338. extern void    libxfs_free (void *);
  339. extern void    *libxfs_realloc (void *, size_t);
  340.  
  341.  
  342. /*
  343.  * Inode interface
  344.  */
  345. struct xfs_inode_log_item;
  346. typedef struct xfs_inode {
  347.     xfs_mount_t        *i_mount;    /* fs mount struct ptr */
  348.     xfs_ino_t        i_ino;        /* inode number (agno/agino) */
  349.     xfs_daddr_t        i_blkno;    /* blkno of inode buffer */
  350.     dev_t            i_dev;        /* dev for this inode */
  351.     ushort            i_len;        /* len of inode buffer */
  352.     ushort            i_boffset;    /* off of inode in buffer */
  353.     xfs_ifork_t        *i_afp;        /* attribute fork pointer */
  354.     xfs_ifork_t        i_df;        /* data fork */
  355.     struct xfs_trans    *i_transp;    /* ptr to owning transaction */
  356.     struct xfs_inode_log_item *i_itemp;    /* logging information */
  357.     unsigned int        i_delayed_blks;    /* count of delay alloc blks */
  358.     xfs_dinode_core_t    i_d;        /* most of ondisk inode */
  359. } xfs_inode_t;
  360.  
  361. typedef struct {
  362.     uid_t    cr_uid;
  363.     gid_t    cr_gid;
  364. } cred_t;
  365.  
  366. extern int    libxfs_inode_alloc (xfs_trans_t **, xfs_inode_t *, mode_t,
  367.                 ushort, xfs_dev_t, cred_t *, xfs_inode_t **);
  368. extern void    libxfs_trans_inode_alloc_buf (xfs_trans_t *, xfs_buf_t *);
  369.  
  370. extern void    libxfs_idata_realloc (xfs_inode_t *, int, int);
  371. extern void    libxfs_idestroy_fork (xfs_inode_t *, int);
  372. extern int    libxfs_iread (xfs_mount_t *, xfs_trans_t *, xfs_ino_t,
  373.                 xfs_inode_t **, xfs_daddr_t);
  374. extern void    libxfs_ichgtime (xfs_inode_t *, int);
  375. extern int    libxfs_iflush_int (xfs_inode_t *, xfs_buf_t *);
  376. extern int    libxfs_itobp (xfs_mount_t *, xfs_trans_t *, xfs_inode_t *,
  377.                 xfs_dinode_t **, xfs_buf_t **, xfs_daddr_t);
  378. extern int    libxfs_iget (xfs_mount_t *, xfs_trans_t *, xfs_ino_t,
  379.                 uint, xfs_inode_t **, xfs_daddr_t);
  380. extern void    libxfs_iput (xfs_inode_t *, uint);
  381.  
  382.  
  383. /*
  384.  * Directory interface
  385.  */
  386. extern void    libxfs_dir_mount (xfs_mount_t *);
  387. extern void    libxfs_dir2_mount (xfs_mount_t *);
  388. extern int    libxfs_dir_init (xfs_trans_t *, xfs_inode_t *, xfs_inode_t *);
  389. extern int    libxfs_dir2_init (xfs_trans_t *, xfs_inode_t *, xfs_inode_t *);
  390. extern int    libxfs_dir_createname (xfs_trans_t *, xfs_inode_t *, char *,
  391.                 int, xfs_ino_t, xfs_fsblock_t *,
  392.                 xfs_bmap_free_t *, xfs_extlen_t);
  393. extern int    libxfs_dir2_createname (xfs_trans_t *, xfs_inode_t *, char *,
  394.                 int, xfs_ino_t, xfs_fsblock_t *,
  395.                 xfs_bmap_free_t *, xfs_extlen_t);
  396. extern int    libxfs_dir_lookup (xfs_trans_t *, xfs_inode_t *,
  397.                 char *, int, xfs_ino_t *);
  398. extern int    libxfs_dir2_lookup (xfs_trans_t *, xfs_inode_t *,
  399.                 char *, int, xfs_ino_t *);
  400. extern int    libxfs_dir_replace (xfs_trans_t *, xfs_inode_t *,
  401.                 char *, int, xfs_ino_t, xfs_fsblock_t *,
  402.                 xfs_bmap_free_t *, xfs_extlen_t);
  403. extern int    libxfs_dir2_replace (xfs_trans_t *, xfs_inode_t *,
  404.                 char *, int, xfs_ino_t, xfs_fsblock_t *,
  405.                 xfs_bmap_free_t *, xfs_extlen_t);
  406. extern int    libxfs_dir_removename (xfs_trans_t *, xfs_inode_t *,
  407.                 char *, int, xfs_ino_t, xfs_fsblock_t *,
  408.                 xfs_bmap_free_t *, xfs_extlen_t);
  409. extern int    libxfs_dir2_removename (xfs_trans_t *, xfs_inode_t *,
  410.                 char *, int, xfs_ino_t, xfs_fsblock_t *,
  411.                 xfs_bmap_free_t *, xfs_extlen_t);
  412. extern int    libxfs_dir_bogus_removename (xfs_trans_t *, xfs_inode_t *,
  413.                 char *, xfs_fsblock_t *, xfs_bmap_free_t *,
  414.                 xfs_extlen_t, xfs_dahash_t, int);
  415. extern int    libxfs_dir2_bogus_removename (xfs_trans_t *, xfs_inode_t *,
  416.                 char *, xfs_fsblock_t *, xfs_bmap_free_t *,
  417.                 xfs_extlen_t, xfs_dahash_t, int);
  418.  
  419.  
  420. /*
  421.  * Block map interface
  422.  */
  423. extern int    libxfs_bmapi (xfs_trans_t *, xfs_inode_t *, xfs_fileoff_t,
  424.                 xfs_filblks_t, int, xfs_fsblock_t *,
  425.                 xfs_extlen_t, xfs_bmbt_irec_t *, int *,
  426.                 xfs_bmap_free_t *);
  427. extern int    libxfs_bmap_finish (xfs_trans_t **, xfs_bmap_free_t *,
  428.                 xfs_fsblock_t, int *);
  429. extern int    libxfs_bmap_next_offset (xfs_trans_t *, xfs_inode_t *,
  430.                 xfs_fileoff_t *, int);
  431. extern int    libxfs_bunmapi (xfs_trans_t *, xfs_inode_t *, xfs_fileoff_t,
  432.                 xfs_filblks_t, int, xfs_extnum_t,
  433.                 xfs_fsblock_t *, xfs_bmap_free_t *, int *);
  434. extern void    libxfs_bmap_del_free (xfs_bmap_free_t *,
  435.                 xfs_bmap_free_item_t *, xfs_bmap_free_item_t *);
  436.  
  437.  
  438. /*
  439.  * All other routines we want to keep common...
  440.  */
  441.  
  442. extern int    libxfs_highbit32 (__uint32_t);
  443. extern int    libxfs_highbit64 (__uint64_t);
  444. extern uint    libxfs_da_log2_roundup (uint);
  445.  
  446. extern void    libxfs_xlate_sb (void *, xfs_sb_t *, int, xfs_arch_t,
  447.                 __int64_t);
  448. extern void    libxfs_xlate_dinode_core (xfs_caddr_t buf,
  449.                 xfs_dinode_core_t *, int, xfs_arch_t);
  450.  
  451. extern int    libxfs_alloc_fix_freelist (xfs_alloc_arg_t *, int);
  452. extern int    libxfs_alloc_file_space (xfs_inode_t *, xfs_off_t,
  453.                 xfs_off_t, int, int);
  454.  
  455. extern xfs_dahash_t    libxfs_da_hashname (uchar_t *, int);
  456. extern int    libxfs_attr_leaf_newentsize (xfs_da_args_t *, int, int *);
  457.  
  458. extern void    libxfs_bmbt_get_all (xfs_bmbt_rec_t *, xfs_bmbt_irec_t *);
  459. #if ARCH_CONVERT != ARCH_NOCONVERT
  460. extern void    libxfs_bmbt_disk_get_all (xfs_bmbt_rec_t *, xfs_bmbt_irec_t *);
  461. #else
  462. # define libxfs_bmbt_disk_get_all(r,s)    libxfs_bmbt_get_all(r,s)
  463. #endif
  464.  
  465. extern int    libxfs_free_extent (xfs_trans_t *, xfs_fsblock_t, xfs_extlen_t);
  466. extern int    libxfs_rtfree_extent (xfs_trans_t *, xfs_rtblock_t,
  467.                 xfs_extlen_t);
  468.  
  469. /* Directory/Attribute routines used by xfs_repair */
  470. extern void    libxfs_da_bjoin (xfs_trans_t *, xfs_dabuf_t *);
  471. extern int    libxfs_da_shrink_inode (xfs_da_args_t *, xfs_dablk_t,
  472.                 xfs_dabuf_t *);
  473. extern int    libxfs_da_grow_inode (xfs_da_args_t *, xfs_dablk_t *);
  474. extern void    libxfs_da_bhold (xfs_trans_t *, xfs_dabuf_t *);
  475. extern void    libxfs_da_brelse (xfs_trans_t *, xfs_dabuf_t *);
  476. extern int    libxfs_da_read_bufr (xfs_trans_t *, xfs_inode_t *, xfs_dablk_t,
  477.                 xfs_daddr_t, xfs_dabuf_t **, int);
  478. extern int    libxfs_da_read_buf (xfs_trans_t *, xfs_inode_t *,
  479.                 xfs_dablk_t, xfs_daddr_t, xfs_dabuf_t **, int);
  480. extern int    libxfs_da_get_buf (xfs_trans_t *, xfs_inode_t *,
  481.                 xfs_dablk_t, xfs_daddr_t, xfs_dabuf_t **, int);
  482. extern void    libxfs_da_log_buf (xfs_trans_t *, xfs_dabuf_t *, uint, uint);
  483. extern int    libxfs_dir2_shrink_inode (xfs_da_args_t *, xfs_dir2_db_t,
  484.                 xfs_dabuf_t *);
  485. extern int    libxfs_dir2_grow_inode (xfs_da_args_t *, int, xfs_dir2_db_t *);
  486. extern int    libxfs_dir2_isleaf (xfs_trans_t *, xfs_inode_t *, int *);
  487. extern int    libxfs_dir2_isblock (xfs_trans_t *, xfs_inode_t *, int *);
  488. extern void    libxfs_dir2_data_use_free (xfs_trans_t *, xfs_dabuf_t *,
  489.                 xfs_dir2_data_unused_t *, xfs_dir2_data_aoff_t,
  490.                 xfs_dir2_data_aoff_t, int *, int *);
  491. extern void    libxfs_dir2_data_make_free (xfs_trans_t *, xfs_dabuf_t *,
  492.                 xfs_dir2_data_aoff_t, xfs_dir2_data_aoff_t,
  493.                 int *, int *);
  494. extern void    libxfs_dir2_data_log_entry (xfs_trans_t *, xfs_dabuf_t *,
  495.                 xfs_dir2_data_entry_t *);
  496. extern void    libxfs_dir2_data_log_header (xfs_trans_t *, xfs_dabuf_t *);
  497. extern void    libxfs_dir2_data_freescan (xfs_mount_t *, xfs_dir2_data_t *,
  498.                 int *, char *);
  499. extern void    libxfs_dir2_free_log_bests (xfs_trans_t *, xfs_dabuf_t *,
  500.                 int, int);
  501.  
  502. /* Shared utility routines */
  503. extern unsigned int    libxfs_log2_roundup(unsigned int i);
  504.  
  505. #endif    /* __LIBXFS_H__ */
  506.